import { Request, Response } from 'express';
import jwt from 'jsonwebtoken';
import User from '../models/User';
import { Secret } from 'jsonwebtoken';

// 生成 JWT Token
const generateToken = (id: string) => {
  const secret: import('jsonwebtoken').Secret = process.env.JWT_SECRET || 'your_jwt_secret_key';
  const options: import('jsonwebtoken').SignOptions = {
    expiresIn: '0.5d'
  };
  return jwt.sign({ id }, secret, options);
};

// 注册用户
export const register = async (req: Request, res: Response) => {
  try {
    const { username, email, password } = req.body;
    console.log('注册请求数据:', { username, email });

    // 检查用户是否已存在
    const userExists = await User.findOne({ $or: [{ email }, { username }] });
    if (userExists) {
      return res.status(400).json({ message: '用户名或邮箱已被注册' });
    }

    // 创建新用户
    const user = await User.create({
      username,
      email,
      password
    });

    // 生成 token
    const token = generateToken(user._id);

    res.status(201).json({
      _id: user._id,
      username: user.username,
      email: user.email,
      role: user.role,
      token
    });
  } catch (error: any) {
    console.error('注册错误:', error);
    res.status(400).json({ message: error.message });
  }
};

// 用户登录
export const login = async (req: Request, res: Response) => {
  try {
    const { username, password } = req.body;
    console.log('登录请求数据:', { username });

    // 查找用户
    const user = await User.findOne({ username });
    if (!user) {
      console.log('用户不存在:', username);
      return res.status(401).json({ message: '用户名或密码错误' });
    }

    // 验证密码
    const isMatch = await user.comparePassword(password);
    console.log('密码验证结果:', isMatch);
    
    if (!isMatch) {
      console.log('密码错误:', username);
      return res.status(401).json({ message: '用户名或密码错误' });
    }

    // 生成 token
    const token = generateToken(user._id);
    console.log('登录成功:', username);

    res.json({
      _id: user._id,
      username: user.username,
      email: user.email,
      role: user.role,
      token
    });
  } catch (error: any) {
    console.error('登录错误:', error);
    res.status(400).json({ message: error.message });
  }
};

// 获取用户信息
export const getUserProfile = async (req: Request, res: Response) => {
  try {
    const user = await User.findById(req.params.id).select('-password');
    if (!user) {
      return res.status(404).json({ message: '用户不存在' });
    }
    res.json(user);
  } catch (error: any) {
    console.error('获取用户信息错误:', error);
    res.status(400).json({ message: error.message });
  }
};

// 更新用户信息
export const updateUserProfile = async (req: Request, res: Response) => {
  try {
    const user = await User.findById(req.params.id);
    if (!user) {
      return res.status(404).json({ message: '用户不存在' });
    }

    user.username = req.body.username || user.username;
    user.email = req.body.email || user.email;
    if (req.body.password) {
      user.password = req.body.password;
    }

    const updatedUser = await user.save();
    const token = generateToken(updatedUser._id);

    res.json({
      _id: updatedUser._id,
      username: updatedUser.username,
      email: updatedUser.email,
      role: updatedUser.role,
      token
    });
  } catch (error: any) {
    console.error('更新用户信息错误:', error);
    res.status(400).json({ message: error.message });
  }
}; 